大家常常搞混的三兄弟,我們一起來了解他們!
Block 是程式碼區塊,不能單獨存活,要接在方法(method)後面才能活!
寫法有2種,{ } 和 do…end,2種寫法,Block 在 Ruby 算是滿特殊的存在。(Block不是物件,前面有提到!)
2種寫法的差異是 { } 的優先順序大於 do…end。
既然Block不是物件,有時不好運用,於是又生出來另外2兄弟 Proc 和 Lambda,這2兄弟可以將 Block 物件化。
主要差異簡單來說
1.是否會檢查參數,Proc 比較彈性,Lambda 比較嚴格
2.不同return的效果,Proc 會在作用域( Scope )執行,Lambda 會完整執行
參考資料
1.https://5xruby.tw/posts/discover-ruby-block
2.https://sharefunyeh.gitbooks.io/webdev/content/articles/ruby_block_proc_lambda.html
3.https://chienhao.tw/Metaprogramming-Ch4-Part3